﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int num = 9;
//	int i = 0;
//	for (i = 1; i < a; i++)
//	{
//		num *= 10;
//	    num+= 9;
//	}
//	printf("%d", num);
//	for (i = 1; i <= num; i++)
//	{
//		printf("%d ",i);
//	}
//	return 0;
//}

//int num(int n)
//{
//	if (n <= 2)
//		return 1;
//	else
//		return num(n - 1) + num(n - 2);
//}
//
//int main()
//{
//	int a = 1;
//	int b = 1;
//	int c = 0;
//	scanf("%d", &c);
//	if (c <= 2)
//	{
//		printf("%d", a);
//	}
//	else
//	{
//		int n=num(c);
//		printf("%d", n);
//	}
//	return 0;
//}

//int main()
//{
//	int a = 1;
//	int b = 1;
//	int c = 0;
//	int count = 2;
//	scanf("%d", &c);
//		if (c <= 2)
//			printf("%d", a);
//		else
//		{
//			int z = 0;
//			while (count != c)
//			{
//			    z = a + b;
//				a = b;
//				b = z;
//				count++;
//			}
//			printf("%d", z);
//		}
//
//	return 0;
//
//}

//int power(int n, int k)
//{
//	if (k == 1)
//		return n;
//	else
//		return n * power(n, k - 1);
//}
//
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d%d", &n, &k);
//	int num = 0;
//	num = power(n, k);
//	printf("%d", num);
//	return 0;
//}

//int DigitSum(int num)
//{
//	if (num == 0)
//		return 0;
//	else
//	{
//		return num % 10 + DigitSum(num / 10);
//	}
//}
//
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	int z = 0;
//	z = DigitSum(num);
//	printf("%d", z);
//	return 0;


//int Fac(int num)
//{
//	if (num == 0)
//		return 1;
//	if (num == 1)
//		return 1;
//	else
//		return num * Fac(num - 1);
//}
//
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	int z = 0;
//	z = Fac(num);
//	printf("%d", z);
//	return 0;
//}
//
//void print(int num)
//{
//	if (num <= 9)
//		printf("%d ", num);
//	else
//	{
//		print(num / 10);
//		printf("%d ", num % 10);
//	}
//}
//
//int main()
//{
//	int num = 0;
//	scanf("%d", &num);
//	print(num);
//	return 0;
//}
// 

//int main()
//{
//	int a = 10;
//	int z = 10;
//	int b = 0;
//	int c = 0;
//	b = ++a;
//	c = z++;
//	printf("%d\n",b );
//	printf("%d\n", c);
//	printf("%d\n", a);
//	printf("%d\n", z);
//
//	return 0;
//
//}

//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a = %d;b = %d\n", a, b);
//	a ^= b ^= a;
//	printf("交换前：a = %d;b = %d\n", a, b);
//
//	return 0;
//}

//int NumberOf1(unsigned int n) 
//{
//    int count = 0;
//    while (n > 0)
//    {
//
//      /*  if (n % 2)
//            count++;
//        n /= 2;*/
//        if (n & 1)
//            count++;
//        n = n >> 1;
//    }
//    return count;
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int ret = 0;
//    ret = NumberOf1(n);
//    printf("%d", ret);
//    return  0;
//}

//void  print(unsigned int n,int m) 
//{
//    int z = 0;
//    int count = 0;
//    if (m == 3)
//    {
//        z = n & 1;
//        printf("%d ", z);
//        count++;
//    }
//    if (m == 2)
//    {   
//        n = n >> 1;
//        z = n & 1;
//        printf("%d ", z);
//        count++;
//    }
//    while (count != 16)
//    {
//        n = n >> 2;
//        z = n & 1;
//        printf("%d ", z);
//      
//        count++;
//    }
//    printf("\n");
//}
//
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//   print(n, 2);
//   print(n, 3);
//    return  0;
//}
//

//int main() {
//    int a, b;
//    while (scanf("%d %d", &a, &b) != EOF)
//    {
//        // 注意 while 处理多个 case
//       // 64 位输出请用 printf("%lld") to 
//        int count = 0;
//        while ((a != 0) || (b != 0))
//        {
//            int ret1 = 0;
//            int ret2 = 0;
//            ret1 = a & 1;
//            ret2 = b & 1;
//            if (ret1 != ret2)
//                count++;
//            a = a >> 1;
//            b = b >> 1;
//        }
//        printf("%d", count);
//    }
//    return 0;
//}

//单身狗
//int main()
//{
//	int arr1[20] = { 0 };
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 20; i++)
//	{
//		scanf("%d", &arr1[i]);
//   }
//	for (i = 0; i < 20; i++)
//	{	
//		int flag = 0;
//		for (j = i+1; j < 20; j++)
//		{
//			if (arr1[i] == arr1[j])
//				flag = 1;
//		}
//		if (flag == 0)
//			break;
//	}
//	printf("%d", arr1[i]);
//	return 0;
//}

//#include<string.h>
 

//void str(char* p, int sz)
//{
//    int i = sz;
//    for (; i >= 0; i--)
//    {
//        printf("%c", *(p + i));
//    }
//}
//
//int main()
//{
//    char ch[100] ;
//    //getchar(ch);
//    /*scanf("%s", ch);
//    getchar();*/
//    gets(ch);
//    int sz = strlen(ch);
//    str(ch, sz);
//    return 0;
//}

//void str(char* p, int sz, int n)
//{
//    int i = 0;
//    int count = 0;
//    for (i = 0; i <= sz; i++)
//    {
//        if ((n + i) <= sz)
//        {
//            if ((n + i) == sz)
//            {
//                count = i+1;
//            }
//            printf("%c", *(p + n + i));
//        }
//
//        else
//            printf("%c", *(p + i - count));
//    }
//}
//
//int main()
//{
//    char ch[100];
//    int num = 3;
//    printf("请输入左旋个数:");
//    scanf("%d", &num);
//    printf("请输入字符串:");
//   getchar();
//   gets(ch); 
//    int sz = strlen(ch);
//    printf("结果:");
//    str(ch, sz, num);
//    return 0;
//}


//int main()
//{
//    int n = 0;
//    int m = 2;
//    scanf("%d", &n);
//    int i = 0;
//    for (i = 1; i < n; i++)
//    {
//        m = m << 1;
//    }
//    printf("m = %d", m);
//    return 0;
//}


//数组的打印
//void print(int* p,int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	printf("\n");
//}
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	print(arr, sz);
//	return 0;
//}

//冒泡排序

//void print(int* p,int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	printf("\n");
//}
//
//void sort(int* p, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int j = 0;
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (*(p + j) > *(p + j + 1))
//			{
//				int ret = *(p + j);
//				*(p + j) = *(p + j + 1);
//				*(p + j + 1) = ret;
//			}
//			/*if (arr[j] > arr[j + 1])
//			{
//				int ret = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = ret;
//			}*/
//		}
//	}
//}
//
//int main()
//{
//	int arr[10] = { 10,9,8,7,6,5,4,3,2,1 };
//	//int i = 0;
//	//int* p = arr;
//	//for (i = 0; i < 10; i++)
//	//{
//	//	scanf("%d", p + i);
//	//}
//	//getchar();
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("排序前：");
//	print(arr, sz);
//	printf("\n");
//	sort(arr, sz);
//	printf("排序后：");
//	print(arr, sz);
//	printf("\n");
//	return 0;
//}

//int my_strlen(char* p)
//{
//	int count = 0;
//	int i = 0;
//	while (*(p + i) != '\0')
//	{
//		count++;
//		i++;
//	}
//	return count;
//}
//
//int main()
//{
//	char arr[20];
//	gets(arr);
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}

//void print(int* p,int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));
//	}
//	printf("\n");
//}

//void sort(int* p, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		int j = 0;
//		for (j = 0; j < sz; j++)
//		{
//			if (*(p + j) % 2 == 0)
//			{
//				int ret = *(p + j);
//				*(p + j) = *(p + i);
//				*(p + i) = ret;
//				break;
//			}
//		}
//	}
//}
//
//int main()
//{
//	int arr[10] = { 0,9,23,7,6,5,4,4,2,1 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("排序前：");
//	print(arr, sz);
//	printf("\n");
//	sort(arr, sz);
//	printf("排序后：");
//	print(arr, sz);
//	printf("\n");
//	return 0;
//}


//void  num_day(int (*p)[12], int a, int b)
//{
//	if ((a % 4 == 0 && a % 100 != 0) || (a % 400 == 0))
//	{
//		printf("%d", *(*(p + 1)+b-1));
//	}
//	else
//	{
//		printf("%d", *((*p)+b-1));
//
//	}
//}
//	int main()
//	{
//		int a, b;
//		int arr[2][12] = { {31,28,31,30,31,30,31,31,30,31,30,31},
//						  {31,29,31,30,31,30,31,31,30,31,30,31} };
//		scanf("%d%d", &a, &b);
//		num_day(arr, a, b);
//		return 0;
//	}
// 

//#include<string.h>
//
// int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,1,2,4,5};
//	int i = 0;
//	int ret = sizeof(arr1) / sizeof(arr1[0]);
//	for (i = 0; i < ret; i++)
//	{	
//		int j = 0;
//		int flag = 0;
//		for (j = 0; j < ret; j++)
//		{
//			if (j != i) 
//			{
//			if (arr1[i] == arr1[j])
//			{
//			flag = 1;
//			break;
//		    }			
//		   }
//			
//		}
//		if (flag == 0)
//		{
//          printf("%d ", arr1[i]);
//		}
//	}
//	return 0;
//}
// 
// 
//#include<string.h>;

//int deter(char* p1, char* p2, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++)
//	{
//		int flag = 0;
//		int j = 0;
//		for (j = 0; j < sz; j++)
//		{
//			if (*(p1 + i) == *(p2 + j))
//			{
//				flag = 1;
//			}
//		}
//		if (flag)
//			break;
//	}
//}
//
//int main()
//{
//	
//	char* p1 = "ABCDEF";
//	char* p2 = "CDEFAB";
//	char* p3 = "cdefab";
//	 printf("p1与p2: %d", deter(p1, p2, strlen(p1)));
//	return 0;
//}

//void menu()
//{
//	printf("*******************\n");
//	printf("***  1:+  2:-  ****\n");
//	printf("***  3:*  4:/  ****\n");
//	printf("****  0 : 结束 ****\n");
//	printf("*******************\n");
//}
//
//#include<stdlib.h>
//
//int add(int x, int y)
//{
//	return x + y;
//}
//
//
//int sub(int x, int y)
//{
//	return x - y;
//}
//
//int mul(int x, int y)
//{
//	return  x * y;
//}
//
//int div_a(int x, int y)
//{
//	return x / y;
//}
//
//void choi( int (*pf)(int,int))
//{ 
//	int a, b;
//    int  ret = 0;;
//	printf("请输入操作数->");
//	scanf("%d%d", &a, &b);
//	ret = pf(a, b);
//	printf("%d\n", ret);
//}
//int main()/*
//{
//	
//	 int input = 0; 
//	
//	do
//	{
//		menu();
//	 scanf("%d", &input);
//	 switch (input)
//	 {
//	 case 1:
//		 printf("请输入操作数->");
//		 scanf("%d%d", &a, &b);
//		 ret = add(a, b);
//		 printf("%df\n", ret);
//		 break;
//	 case 2:
//		 printf("请输入操作数->");
//		 scanf("%d%d", &a, &b);
//		 ret = sub(a, b);
//		 printf("%d\n", ret);
//		 break;
//	 case 3:
//		 printf("请输入操作数->");
//		 scanf("%d%d", &a, &b);
//		 ret = mul(a, b);
//		 printf("%df\n", ret);
//		 break;
//	 case 4:
//		 printf("请输入操作数->");
//		 scanf("%d%d", &a, &b);
//		 ret = div(a,b);
//		 printf("%d\n", ret);
//		 break;
//	 case 0:
//		 printf("谢谢使用\n");
//		 break;
//	 default :
//		 printf("选择错误，请重新选择\n");
//		 break;
//	 }
//	 system("cls");
//
//	} while (input);
//	
//	return 0;
//}*/
//
//int main()
//{
//
//	int input = 0;
//
//	do
//	{
//		menu();
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			choi(add);
//			break;
//		case 2:
//			choi(sub);
//			break;
//		case 3:
//			choi(mul);
//
//			break;
//		case 4:
//			choi(div_a);
//			break;
//		case 0:
//			printf("谢谢使用\n");
//			break;
//		default:
//			printf("选择错误，请重新选择\n");
//			break;
//		}
//	} while (input);
//
//	return 0;
//}
//#include<stdlib.h>
//#include<string.h>
//struct Stu
//{
//	char name[20];
//	int age;
//	int hei;
//};
//int my_fun_age(void* p1, void* p2)
//{
//	return ((struct Stu*)p1)->age - ((struct Stu*)p2)->age;
//}
//int my_fun_name(const void* p1,const void* p2)
//{
//	return strcmp(((struct Stu*)p1)->name, ((struct Stu*)p2)->name);
//}
////int main()
////{
////	struct Stu s[3] = { {"zhangsan",18,189},{"lisi",89,178},{"yangshijun",18,160} };
////	int sz = sizeof(s)/sizeof(s[0]);
////qsort(s, sz, sizeof(s[0]), my_fun_name);
////	qsort(s, sz, sizeof(s[0]), my_fun_age);
////	return 0;
////}
//
//void swap(char* p1,char* p2, size_t wath)
//{
//	int i = 0;
//	for (i = 0; i < wath; i++)
//	{
//		/*char wap = *(p1 + i);
//		*(p1 + i) = *(p2 + i);
//		*(p2 + i) = wap;*/
//		char tem = *p1;
//		*p1 = *p2;
//		*p2 = tem;
//		p1++;
//		p2++;
//
//
//	}
//}
//void my_qsort(void* p, size_t sz, size_t num, int (*pf)( const void* p1, const void* p2))
//{
//	int i = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		int j = 0;
//		for (j = 0; j < sz-1-i; j++)
//		{
//			if (pf((char*)p + j * num, (char*)p + (j + 1) * num  ) > 0)
//			{
//				swap((char*)p + j * num, (char*)p + (j + 1) * num, num);
//			}
//		}
//	}
//}
//
//int main()
//{
//	struct Stu s[3] = { {"zhangsan",18,189},{"lisi",89,178},{"yangshijun",32,160} };
//	int sz = sizeof(s) / sizeof(s[0]);
//
//	my_qsort(s, sz, sizeof(s[0]), my_fun_name);
//	
//	printf("%s\n", s[0].name);
//	printf("%s\n", s[1].name);
//	printf("%s\n", s[2].name);
//
//	my_qsort(s, sz, sizeof(s[0]), my_fun_age);
//
//	printf("%d\n", s[0].age);
//	printf("%d\n", s[1].age);
//	printf("%d\n", s[2].age);
//
////	return 0;
//}

//#include<stdio.h>
//#include<string.h>

//寄存器
//size_t my_strlen(char* p)
//{
//	size_t count = 0;
//	while (*p++ != '\0')
//		count++;
//	return count;
//}

//递归
//size_t my_strlen(char* p)
//{
//	if (*p == '\0')
//		return 0;
//	else
//		return 1 + my_strlen(++p);
//}

//指针
//size_t my_strlen(char* p)
//{
//	char* pp = p;
//	while (*pp != '\0')
//		pp++;
//	return pp - p;
//}
//
//int main()
//{
//	char arr1[] = "hello ";
//	char arr2[] = "word";
//	size_t ret = my_strlen(arr1);
//	printf("%zd", ret);
//	return 0;
//}
// 
// 
//模拟strcop函数
//char* my_strcpy(char* ptr1, const char* ptr2)
//{
//	char* map = ptr1;
//	while (*ptr1++ = *ptr2++ )
//	{
//		;
//	}
//	return map;
//}

//模拟strcat函数
//#include<assert.h>
//void my_strcat(char* ptr1, const char* ptr2)
//{
//	assert(ptr1 && ptr2);
//	/*while (*ptr1)
//	{
//       ptr1++;
//	}*/
//	while (*ptr1++)
//	{
//		;
//	}
//
//	while ((*ptr1++ = *ptr2++))
//	{
//		;
//	}
//
//}
//int main()
//{
//	char arr1[30] = "hello word /";
//	char arr3[] = "nihao diannao";
//	char arr2[20];
//	/*my_strcpy(arr2, arr1);
//	printf("%s\n", arr2);*/
//	my_strcat(arr1, arr3);
//	printf("%s\n", arr1);
//
//	return 0;
//}
//


//int main()
//{
//	int a = 20;
//	int* p = &a;
//
//	printf("&a = %p\n", &a);
//	printf("p  = %p\n", p);
//
//	*p = 2;
//	printf("a  =   %d\n", a);
//	printf("*p =   %d\n", *p);
//
//	return 0;
//}


//
//int main()
//{
//	int* p1;
//	char* p2;
//	printf("p1的大小 = %d\n", sizeof(p1));
//	printf("p2的大小 = %d\n", sizeof(p2));
//	return 0;
//}


//int main()
//{
//	char a[] = { '1','2','3','4','5' };
//	char* p1 = &a[0];
//	int* p2 = &a[0];
//	printf("%c\n", *(p1 + 1));
//	printf("%c\n", *(p2 + 1));
//	return 0;
//}

//#include <stdio.h>
//
//float func_count(int n, int ptr[],int sz)
//{
//    float sum = 0.1 * n;
//   
//    for (int i = 0; i < sz; i++)
//    {
//        if (*(ptr + i) > 60)
//        {
//            sum += 0.1;
//        }
//    }
//    return sum;
//}
//int main()
//{    int n = 4;
//    //scanf("%d", &n);
//    int arr[20] = { 22,33,99,88}; 
//    int sz = sizeof(arr) / sizeof(arr[0]);
//   /* for (int i = 0; i < n; i++)
//    {
//        scanf("%d", &arr[i]);
//    }*/
//    printf("%f", func_count(n, arr, sz));
//    return 0;
//}
//
//int est_func(int n)
//{
//    int i = 2;
//    for (; i < (n / 2); i++)
//    {
//        if (n % i == 0)
//            return 0;
//    }
//    return 1;
//}
//
//int main() {
//    int n = 0;
//    int m = 0;
//    scanf("%d %d", &n, &m);
//    for (; n <= m; n++)
//    {
//        if (est_func(n))
//            printf("%d ", n);
//    }
//    return 0;
//}

#include<stdio.h>/*
#include<string.h>
int main()
{
	char* ptr = "wenjixiang@wenji!yangrui@yangshijun";
	char* str = "@!";
	char* num = NULL;
	for (num = strtok(ptr,str); num != NULL; num = strtok(NULL, str))
	{
		printf("%s\n", num);
	}
	return 0;
}*/

//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abcaef";
//	char arr3[] = "abcdeef";
//	if (strcmp(arr2, arr1) > 0)
//	{
//		printf("arr2[]大\n");
//	}
//	else
//		printf("arr1[]大\n");
//
//	return 0;
//}
#include<assert.h>
//int my_strcmp(const char* ptr, const char* str)
//{
//
//	assert(str != NULL);
//	assert(ptr != NULL);
//	while (*ptr == *str)
//	{
//		if (*str == '\0' && *ptr == '\0')
//			return 0;
//		ptr++;
//		str++;
//	}
//		return *ptr - *str;
//}
//
//int main()
//{
//	char* arr1 = "abc";
//	char* arr2 = "abcaef";
//	char* arr3 = "abc";
//	if (my_strcmp(arr1, arr2) > 0)
//	{
//		printf("arr1[]大\n");
//	}
//	else if (my_strcmp(arr1, arr2) < 0)
//		printf("arr2大\n");
//	else
//		printf("二者一样大\n");
//
//	return 0;
////}
//#include<string.h>
//#include<assert.h>
//
//char* my_strstr(const char* ptr, const char* str)
//{
//	assert(ptr != NULL);
//	assert(str != NULL);
//	const char* err = ptr;
//	const char* arr = str;
//	const char* nn = ptr;
//	while (*err)
//	{
//		err = nn;
//		
//		while(*err && *arr &&(*err == *arr))
//		{
//			err++;
//			arr++;
//		}
//		if (*arr == '\0')
//				return nn;
//		arr = str;
//		nn++;
//	}
//	return NULL;
//}
//
//int main()
//{
//	char arr1[] = "assssbhh";
//	char arr2[] = "assssbhhnjhug";
//
//	if (my_strstr(arr1, arr2) != NULL)
//		printf("%s\n", my_strstr(arr1, arr2));
//	else
//		printf("找不到\n");
//	return 0;
//}


#include<string.h>

//模拟strncpy
//char* my_strncpy(char* ptr, const char* str, size_t count)
//{
//	assert(ptr && str);
//	char* ret = ptr;
//	while (count--)
//	{
//		*ptr = *str;
//		ptr++;
//		str++;
//	}
//	return ptr;
//}
//int main()
//{
//	char arr1[] = "abcdefghh";
//	char arr2[30] = "mmmmmmmmm";
//	char* ret = my_strncpy(arr2+4, arr1, 1);
//	printf("%s\n", ret);
//	printf("%s\n", arr2);
//
//
//
//	return 0;
//}

//模拟实现strncat

//char* my_strncat(char* ptr, const char* str, size_t count)
//{
//	char* ret = ptr;
//	assert(ptr && str);
//	while (*ptr != '\0')
//	{
//		ptr++;
//	}
//	while (count--)
//	{
//		*ptr = *str;
//		ptr++;
//		str++;
//	}
//	return ret;
//}
//
//int main()
//{
//	char arr1[30] = "abcdef";
//	char arr2[23] = "fffaf";
//	char* ret = my_strncat(arr1, arr2, 4);
//	printf("%s\n", ret);
//
//	return 0;
//}

//模拟实现memcpy

//void* my_memcpy(void* ptr, const void* str, size_t Sise)
//{
//	assert(ptr && str);
//	void* ret = ptr;
//	char* s1 = (char*)ptr;
//	char* s2 = (char*)str;
//	while (Sise--)
//	{
//		*s1 = *s2;
//		s1++;
//		s2++;
//	}
//	return ret;
//}
//
//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8 };
//	int arr2[29] = {0 };
//	int* ret = (int*)my_memcpy(arr2, arr1, 20);
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d\n", arr2[i]);
//	}
//	return 0;
//}

//模拟实现memmove
//void* my_memmove(void* ptr, const void* str, size_t count)
//{
//	assert(ptr && str);
//	void* ret = ptr;
//	if (ptr > str)
//	{
//		while (count--)
//		{
//			*((char*)ptr + count) = *((char*)str + count);
//		}
//		 
//	}
//	else
//	{
//		while (count--)
//		{
//			*((char*)ptr) = *((char*)str);
//			((char*)ptr)++;
//			((char*)str)++;
//		}
//	}
//}
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* ret = (int*)memmove(arr1+2, arr1+4, 12);
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d  ", arr1[i]);
//	}
//
//	return 0;
//}

//int main()
//{
//	int a = 0x11223344;
//	if (*(char*)&a == 68)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}
//
//#include<time.h>
//int main()
//{
//	time_t biggst = 0x7FFFFFFF;
//	printf("biggest  = %s \n", asctime(gmtime(&biggst)));
//	printf("biggest  = %s \n", ctime(&biggst));
//	return 0;


//int main()
//{
//	int n = 9;
//	float* pfloat = (float*)&n;
//	printf("%d\n", n);
//	printf("%.32f\n", *pfloat);
//
//	*pfloat = 9.0;
//	printf("%d\n", n);
//	printf("%f\n", *pfloat);
//
//	return 0;
//}

//


//int main()
//{
//	float arr[5] = { 0 };
//	float num = 0;
//	int count = 0;
//	for (int i = 0; i < 5; i++)
//	{
//		scanf("%f", &arr[i]);
//	}
//	for (int i = 0; i < 5; i++)
//	{
//		num += arr[i];
//	}
//	printf("平均成绩 = %f\n", num);
//	for (int i = 0; i < 5; i++)
//	{
//		if (arr[i] < num)
//			count++;
//	}
//	printf("不及格人数= %d\n", count);
//	for (int i = 0; i < 5; i++)
//	{
//		if (arr[i] < 60)
//			printf("%f ", arr[i]);
//	}
//
//
//	return 0;
//}

//int main()
//{
//	float arr[5] = { 0 };
//	for (int i = 0; i < 5; i++)
//	{
//		scanf("%f", &arr[i]);
//	}
//	float max = arr[0];
//	float min = arr[0];
//	for (int i = 1; i < 5; i++)
//	{
//		if (max < arr[i])
//			max = arr[i];
//		if (min > arr[i])
//			min = arr[i];
//	}
//	printf("%f\n", max - min);
//
//
//	return 0;
//}

//int main()
//{
//	int a[6] = { 3,1,7,2,6,3 };
//	int i = 0;
//	for (; i < 5; i++)
//	{
//		int j = 0;
//		for (; j < 5 - i; j++)
//		{
//			if (a[j] < a[j + 1])
//			{
//				int tem = a[j];
//				a[j] = a[j + 1];
//				a[j + 1] = tem;
//			}
//		}
//	}
//
//	for (i = 0; i < 6; i++)
//	{
//		printf("%d ", a[i]);
//	}
//	return 0;
//}
//#include<stdio.h>
//
//void selectSort(int data[], int n)
//{
//
//	/*----begin------*/
//	int i, j;
//	int min = 0;
//	for (i = 0; i < n - 1; i++)
//	{
//		min = i;
//		for (j = i + 1; j < n; j++)
//		{
//			if (data[min] < data[j])
//			{
//				min = j;
//			}
//		}
//		int temp = data[min];
//		data[min] = data[i];
//		data[i] = temp;
//	}
//	for (i = 0; i < n; i++)
//	{
//		printf("%d ", data[i]);
//	}
//	/*-----end------*/
//}
//
//int main()
//{
//	int data[] = { 3,1,7,2,6,3 };
//	selectSort(data, 6);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int n = 9;
//	float* pFloat = (float*)&n;
//	printf("n的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	*pFloat = 9.0;
//	printf("num的值为：%d\n", n);
//	printf("*pFloat的值为：%f\n", *pFloat);
//	return 0;
//}
//*p = 4 (*p)+1= 5 p p+1
//union 
//{
//	int i;
//	char b;
//}s;
//int main()
//{
//	 s.i = 1;
//	 if (s.b)
//		 printf("小端\n");
//	 else
//		 printf("大端\n");
//	return 0;
//}

//int main()
//{
//	int a = 5;
//	int* p = &a;
//
//	*p = 20;
//
//	printf("%d\n", (*p)++);
//	printf("%d\n", *p);
//	printf("%d\n", ++*p);
//
//	return 0;
//}

#include<stdlib.h>

//int main()
//{ 
//	//int* ptr = (int*)malloc(5 * sizeof(int));
//	int* ptr = (int*)calloc(10, sizeof(int));
//	if (ptr == NULL)
//	{
//		perror("malloc");
//	}
//	for (int i = 0; i < 5 ; i++)
//	{
//		scanf("%d", ptr+i);
//	}
//	for (int i = 0; i < 5 ; i++)
//	{
//		printf("%d ", *(ptr + i));
//	}
//	int* str = realloc(ptr, 10 * sizeof(int));
//	if (str != NULL)
//		ptr = str;
//	for (int i = 0; i < 10; i++)
//	{
//		scanf("%d", ptr + i);
//	}
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", *(ptr + i));
//	}
//	free(ptr);
//	ptr = NULL;
//	return 0;
//}

#include<stdlib.h>

//struct Str
//{
//	int n;
//	int c;
//	int arr[];
//};
//
//int main()
//{
//
//	//malloc开辟空间
//	//struct Str* ptr = (struct Str*)malloc(sizeof(int) + 5 * sizeof(int));
//
//	//calloc开辟空间
//	struct Str* ptr = (struct Str*)calloc(7, sizeof(int));
//	ptr->n = 10;
//	if (ptr == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	printf("%d\n", sizeof(struct Str));
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		scanf("%d", (ptr->arr) + i);
//	}
//	for (i = 0; i < 5; i++)
//	{
//		printf("%d ", ptr->arr[i]);
//	}
//	printf("\n");
//
//	//realloc修改
//	struct Str* str = (struct Str*)realloc(ptr, 10 * sizeof(int));
//
//	printf("%d\n", sizeof(struct Str));
//
//	if (str != NULL)
//	{
//		ptr = str;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		scanf("%d", (ptr->arr) + i);
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", ptr->arr[i]);
//	}
//
//	free(ptr);
//	ptr = NULL;
//	return 0;
//}

//利用malloc开辟3*5的二位空间

////int main()/*
//{
//	int* ptr[3] = { NULL };
//	ptr[0] = (int*)malloc(5 * sizeof(int));
//	ptr[1] = (int*)malloc(5 * sizeof(int));
//	ptr[2] = (int*)malloc(5 * sizeof(int));
//	int i = 0;
//	for (i = 0;  i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			scanf("%d", ptr[i]+j);
//		}
//	}
//	for (i = 0;  i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d ", ptr[i][j]);
//		}
//		printf("\n");
//	}
//	free(ptr[0]);
//	free(ptr[1]);
//	free(ptr[2]);
//	ptr[0] = NULL;
//	ptr[1] = NULL;
//	ptr[2] = NULL;
//	return 0;
//}*/


//int main()
//{
//	FILE* pf = NULL;
//	int a = 10000;
//	pf = fopen("test.txt", "w");
//	if ( pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	fputc('a', pf);
//	fputc('b', pf);
//	fputc('c', pf);
//
	//fwrite(&a, 4, 1, pf);
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}



//int main(){
//	FILE* pf = NULL;
//	pf = fopen("test.txt", "w");
//	if ( pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char ch = 'a';
//	for (int i = 0; i < 26; i++)
//	{
//		fputc(ch, pf);
//		ch++;
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main(){
//	FILE* pf = NULL;
//	pf = fopen("test.txt", "r");
//	if ( pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char ch = 'a';
//	for (int i = 0; i < 26; i++)
//	{
//		printf("%c ",fgetc(pf));
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main() {
//	FILE* pf = NULL;
//	pf = fopen("test.txt", "w");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	fputs("wenjixiang\n", pf);
//	fputs("yangshijun\n", pf);
//	fputs("yangrui\n", pf);
//
//	pf = NULL;
//	return 0;
//

//
//int main() {
//	FILE* pf = NULL;
//	pf = fopen("test.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	char arr[20] = "xxxxxxxxxxxxxxxxx";
//	while (fgets(arr, 20, pf) != NULL)
//	{
//		printf("%s", arr);
//		printf("\n");
//	}
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	FILE* ptr1 = NULL;
//	FILE* ptr2 = NULL;
//	FILE* ptr3= NULL;
//
//	ptr1 = fopen("test.txt", "r");
//	ptr2 = fopen("test_copy.txt", "w");
//	
//	if (ptr1 == NULL || ptr2 == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	
//	char arr[20];
//	while (fgets(arr, 20, ptr1) != NULL)
//	{
//		fputs(arr, ptr2);
//		fflush(ptr2);
//	}
//	ptr3 = fopen("test_copy.txt", "r");
//		if ( ptr3 == NULL)	
//		{
//			perror("fopen");
//			return 1;
//		}
//	char arr1[20] = { 0 };
//	while (fgets(arr1, 20, ptr3) != NULL)
//	{
//		puts(arr1);
//	}
//	
//	fclose(ptr1);
//	fclose(ptr2);
//	fclose(ptr3);
//
//	ptr1 = NULL;
//	ptr2 = NULL;
//	ptr3 = NULL;
//	return 0;
//}

//union
//{
//	float f;
//	int i;
//}fi;
//
//int main()
//{
//	fi.i = 5;
//	printf("%f\n", fi.f);
//	printf("%d\n", fi.i);
//}

#include<stdlib.h>

//int compare_integers(void const* a, void const* b)
//{
//	register int const* pa = a;
//	register int const* pb = b;
//	return *pa > *pb ? 1 : *pa < *pb ? -1 : 0;
//};
//
//int main()
//{
//	int* array = NULL;
//	int n_values = NULL;
//	int i = 0;
//
//	printf("How many values these? ");
//	if (scanf("%d", &n_values) != 1 || n_values <= 0)
//	{
//		printf("Illegl number of values.\n");
//		exit(EXIT_FAILURE);
//	}
//
//	array = malloc(n_values * sizeof(int));
//	if (array == NULL)
//	{
//		perror("malloc");
//		exit(EXIT_FAILURE);
//	}
//
//	for (i = 0; i < n_values; i++)
//	{
//		printf("? ");
//		if (scanf("%d", array + i) != 1)
//		{
//			printf("结束\n");
//			free(array);
//			exit(EXIT_FAILURE);
//		}
//	}
//
//	qsort(array, n_values, sizeof(int), compare_integers);
//	
//	for (i = 0; i < n_values; i++)
//	{
//		printf("%d ", array[i]);
//
//	}
//
//	free(array);
//	array = NULL;
//	return 0;
//}

//
//struct 
//{
//	char name[20];
//	char sex[10];
//	float height;
//	
//}stu1 = { "wenjie", "男",158 };

//int main()
//{
//	printf("%s", stu1.name);
//	return 0;
//}


//struct Student
//{
//	char name[20];
//	char sex[10];
//	float height;
//};
//
//int main()
//{
//	struct Student s1;
//	struct Student s2;
//
//	return 0;
//}

//struct 
//{
//	char name[20];//
//	名字
//		int age;//
//	年龄
//		char sex[5];//
//	性别
//		char id[20];//
//	学号
//
//}s3 = { "张wu", 20, "男", "20230818001" };
//int main()
//{
//	按照结构体成员的顺序初始化
//		 printf("name: %s\n", s3.name);
//		 printf("age : %d\n", s3.age);
//		 printf("sex : %s\n", s3.sex);
//		 printf("id  : %s\n", s3.id);
//		 按照指定的顺序初始化
//		/* struct Stu s2 = { .age = 18, .name = "lisi", .id = "20230818002", .sex = "女" };
//		printf("name: %s\n", s2.name);
//		 printf("age : %d\n", s2.age);
//		 printf("sex : %s\n", s2.sex);
//		 printf("id  : %s\n", s2.id);*/
//		 return 0;
//}

//struct
//{
//	char name;
//	char sex;
//	float height;
//
//}str;
//
//int main()
//{
//	int sz = sizeof(str);
//	printf("%d", sz);
//	return 0;
//}


//struct
//{
//	char i;
//	int in;
//	float a;
//}s1;
//
//struct
//{   
//	int in;
//	char i;
//	float a;
//}s2;
//
//struct
//{
//	int in;
//	char arr[5];
//	double a;
//}s3;
//
//struct
//{
//	int in;
//	char i;
//	float a;
//	struct
//	{
//		char ch;
//		int mun;
//		int b;
//	};
//}s4;
//
//int main()
//{
//	//printf("%d", sizeof(s1));
//	printf("s2的大小：%d\n", sizeof(s2));
//	printf("s3的大小：%d\n", sizeof(s3));
//	printf("s4的大小：%d\n", sizeof(s4));
//
//
//	return 0;
//}

////编写一个程序，把标准输入的字符逐个复制到标准输出
//int main()
//{
//	char ch[20];
//	char CH[20];
//	
//	gets(ch);
//	gets(CH);
//
//	puts(ch);
//	puts(CH);
//	return 0;
//}

//#include <stdio.h>
//#include<math.h>
//
//long int func(long int t)
//{
//    long int num = 0;
//    long int flag = t;
//    int count = 0;
//    while (flag != 0)
//    {
//        count++;
//        flag /= 10;
//    }
//    num = t * (int)pow(10, --count);
//    while (count != 0)
//    {
//        t /= 10;
//        num = num + (t % 10) * pow(10, --count);
//    }
//    return num;
//}
//
//int main() {
//    long int num = 0;
//    scanf("%ld", &num);
//    //找到他的回文
//    long int sum = func(num);
//
//    //判断素数
//    int flag;
//    for (int i = 2; i <= (int)sqrt(sum); i++)
//    {  //判断是否为素数
//        flag = 1;
//        if (sum % i == 0) {
//            flag = 0;
//            break;
//        }
//    }
//    if (flag) {
//        printf("prime");
//    }
//    else {
//        printf("noprime");
//    }
//    return 0;
//}

//#include <stdio.h>
//#include<math.h>
//
//long int func(long int t)
//{
//    long int flag = t;
//    while (t > 9 )
//    {   t /= 10;
//        flag = flag * 10 + t % 10;
//       
//
//    }
//    return flag;
//}
//
//int main() {
//    long int num = 0;
//    scanf("%ld", &num);
//    //找到他的回文
//    long int sum = func(num);
//
//    //判断素数
//    int flag;
//    for (int i = 2; i <= (int)sqrt(sum); i++)
//    {  //判断是否为素数
//        flag = 1;
//        if (sum % i == 0) {
//            flag = 0;
//            break;
//        }
//    }
//    if (flag) {
//        printf("prime");
//    }
//    else {
//        printf("noprime");
//    }
//    return 0;
//}

//
//描述
//给你一个整数n，输出n∗n的蛇形矩阵。
//输入描述：
//输入一行，包含一个整数n
//输出描述：
//输出n行，每行包含n个正整数，通过空格分隔。


//1  2  6  7  
//3  5  8  13
//4  9  12 15
//10 11 14 16
// 
//1,遇到i=0，则平移一位，然后斜向下
//2：遇到j=0，且i ！= 0,则竖直向下移一位，然后斜向上
//3：i= n时，则平移一位，然后斜向上
//4：j= n时，则下移一位，然后斜向下
//内部的运动

#include<stdio.h>
//int main()
//{
//	int n = 0;
//	int count = 1;
//	scanf("%d", &n);
//	int arr[1000][1000] = { 0 };
//	int i = 0;
//	int j = 0;
//	int flag = 0;
//	while (i < n && j < n)
//	{
//		arr[i][j] = count;
//
//				if (0 == i && j < n)
//				{
//					j++;
//					flag = 1;
//					continue;
//				}
//				else if (0 == j && i < n)
//				{
//					i++;
//					flag = 0;
//					continue;
//				}
//				else if (n == i && j < n)
//				{
//					j++;
//					flag = 0;
//					continue;
//
//				}
//				else if (i < n && j == n)
//				{
//					i++;
//					flag = 1;
//					continue;
//
//				}
//				if (flag == 1)
//				{
//					i--;
//					j--;
//				}
//				else
//				{
//					i++;
//					j++;
//				}
//				
//	}
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//
//蛇形矩阵
//#include <stdio.h>
//int arr[1000][1000] = { 0 };
//int main() {
//    int n = 0;
//    int count = 1;
//    scanf("%d", &n);
//
//    int i = 0;
//    int j = 0;
//    arr[0][0] = 1;
//    int flag = 0;
//    while (count <= n * n) {
//        arr[i][j] = count++;
//         if (i < n && j == (n - 1) && flag == 0) {
//            i++;
//            flag = 1;
//            continue;
//
//        }
//         else if (0 == i && j < n && flag == 0) {
//            j++;
//            flag = 1;
//            continue;
//        } 
//        else if ((n - 1) == i && j < n && flag == 1) {
//            j++;
//            flag = 0;
//            continue;
//        }
//        else if (0 == j && i < n && flag == 1) {
//            i++;
//            flag = 0;
//            continue;
//        }
//        
//        if (flag == 1) {
//            i++;
//            j--;
//        }
//        else if (flag == 0) {
//            i--;
//            j++;
//        }
//
//    }
//    for (i = 0; i < n; i++) {
//        for (j = 0; j < n; j++) {
//            printf("%d ", arr[i][j]);
//        }
//        printf("\n");
//    }
//    return 0;
//}


//#include <stdio.h>
//int array[1001][1001] = { 0 };
//int main(void)
//{
//    int n = 0;
//    scanf("%d", &n);
//    int i = 1, j = 1, k = 0, pos = 1; //pos代表方向移动   1代表右上   -1代表左下
//    array[i][j] = 1;
//    for (k = 2; k <= n * n; k++)
//    {
//        if (i == 1 && j < n && pos == 1) //碰到上边界,列增加1,行不变     此后行增,列减
//        {
//            array[i][++j] = k;
//            pos = -1;                 //方向注意
//        }
//        else if (j == 1 && i < n && pos == -1)//碰到左边界,行增加1,列不变     此后行减,列增
//        {
//            array[++i][j] = k;
//            pos = 1;                     //方向注意               
//        }
//        else if (j == n && pos == 1) //碰到左边界,行增加1,列不变     此后行增,列减
//        {
//            array[++i][j] = k;
//            pos = -1;                     //方向注意
//        }
//        else if (i == n && pos == -1) //碰到右边界,列增加1,行不变    此后行减,列增
//        {
//            array[i][++j] = k;
//            pos = 1;
//        }
//        else if (pos == 1)         //除去上面的边界情况,就是中间移动过程
//        {
//            array[--i][++j] = k;
//        }
//        else if (pos == -1)
//        {
//            array[++i][--j] = k;
//        }
//    }
//    for (i = 1; i <= n; i++)
//    {
//        for (j = 1; j <= n; j++)
//            printf("%d ", array[i][j]);
//        printf("\n");
//    }
//    return 0;
//}
//#include<math.h>
//long long sum(long long M, long long huiwen_M, int N)//M与其回文数相加，N进制
//{
//    int num, jin = 0, i = 0;
//    long long out = 0;;
//    while (M != 0)
//    {
//        if (N < 11)
//        {
//            num = M % 10 + huiwen_M % 10 + jin;
//            out = out + num % N * pow(10, i);
//            jin = num / N;
//            M = M / 10;
//            huiwen_M = huiwen_M / 10;
//            i++;
//        }
//        else
//        {
//            num = M % 16 + huiwen_M % 16 + jin;
//            out = out + num % N * pow(16, i);
//            jin = num / N;
//            M = M / 16;
//            huiwen_M = huiwen_M / 16;
//            i++;
//        }
//    }
//    if (N < 11) out = out + jin * pow(10, i);
//    else out = out + jin * pow(16, i);
//    return out;
//}
//
//int main()
//{
//    long long int n = 0;
//    long long int m = 0;
//    int a = 0;
//    scanf("%d", &a);
//    scanf("%lld%lld", &n, &m);
//    long long int ret = sum(n, m, a);
//    printf("%lld", ret);
//    return 0;
//}
//
//int main()
//{
//	int a, b;
//	int* p1, * p2;
//	p1 = &a;
//	p2 = &b;
//	scanf("%d%d", p1, p2);
//	printf("%d\n", *p1 + *p2);
//	printf("%d\n", (*p1) * (*p2));
//
//}
//需要研究
//int main()
//{
//	int num = 0;
//	int a[3][3] = { 1,2,3,4,5,6,7,8,9 };
//	for (int i = 0; i < 3; i++)
//	{
//		for (int j = 0; j < 3; j++)
//		{
//			num += a[i][j];
//		}
//	}
//	printf("%d\n", num/9);
//	num = 0;
//	int (*p)[3];
//	p = &a[0];
//	for (int i = 0; i < 3; i++) {
//		for (int j = 0; j < 3; j++) {
//			num += *(*(p+i)+j); // 使用指针访问二维数组元素
//		}
//	}
//	printf("%d\n", num/9);
//		return 0;
//}

//int main()
//{
//	int a, b;
//	int* p1, * p2;
//	p1 = &a;
//	p2 = &b;
//	scanf("%d%d", p1, p2);
//	printf("%d %d\n", *p1, *p2);
//	int c = *p1;
//	*p1 = *p2;
//	*p2 = c;
//	printf("%d %d\n", *p1, *p2);
//
//	return 0;
//}

//int main()
//{
//	char* a[] = { "abc","ef","gh","ilk" };
//	char* a[] = { "abc","ef","gh","ilk" };
//	for (int i = 0; i < 4; i++)
//	{
//		printf("%s", a[i]);
//	}
//	printf("\n");
//	char** p = a;
//	for (int i = 0; i < 4; i++)
//	{
//		printf("%s", *(p+i));
//	}
//	printf("\n");
//	return 0;
////}
//
//int main()
//{
//	char* a[] = "adgf";
//	char** p = &a;
//	printf("%s\n", a);
//	printf("%s\n", *p);
//}

//需要研究
//#include <stdio.h>
//#include <string.h>
//
//void bubbleSort(char* arr[], int n) {
//    for (int i = 0; i < n - 1; i++) {
//        for (int j = 0; j < n - i - 1; j++) {
//            if (strcmp(arr[j], arr[j + 1]) < 0) {
//                char* temp = arr[j];
//                arr[j] = arr[j + 1];
//                arr[j + 1] = temp;
//            }
//        }
//    }
//}
//
//int main() {
//    char* a[] = {"abc","ef", "gh","ijk"};
//    
//    bubbleSort(a, 4);
//
//    printf("降序排序后的字符串数组：\n");
//    for (int i = 0; i < 4; i++) {
//        printf("%s\n", a[i]);
//    }
//
//    return 0;
//}
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
	int data;
	struct node* next;
}LinkNode;

LinkNode* InitList()
{

	LinkNode* temp = (LinkNode*)malloc(sizeof(LinkNode));
	temp->next = NULL;
	return temp;
}

int LinkEmpty(LinkNode* L)
{
	if (L == NULL)
	{
		perror("malloc fail");
		exit(1);
	}
}

int LinkInsert(LinkNode* L, int i, int e)
{
	LinkNode* temp = L;
	int count = 0;
	while (temp->next && count < i - 1)

	{
		temp = temp->next;
		count++;
	}

	if (!(temp) || count < i - 1)
	{

		printf(">>>访问越界,请重试!\n");
		return 0;
	}

	LinkNode* P = (LinkNode*)malloc(sizeof(LinkNode));
	P->data = e;
	P->next = temp->next;
	temp->next = P;
	return 1;
}

void LinkPrint(LinkNode* L)
{

	LinkNode* P = L->next;
	printf(">链表L中的元素为:");
	while (P)
	{
		printf(" %d", P->data);
		P = P->next;
	}
	printf("\n");
}
int LinkLenght(LinkNode* L)
{
	LinkNode* temp = L;
	int len = 0;
	while (temp->next)
	{
		temp = temp->next;
		len++;
	}
	return len;
}
int LinkDelect(LinkNode* L, int i) {
	LinkNode* temp = L;
	int count = 0;
	while (temp->next && count < i - 1)
	{

		temp = temp->next;
		count++;
	}
	if (!(temp->next) || count < i - 1)
	{

		printf(">删除位置不合理,请重试!\n");
		return 0;
	}
	LinkNode* P = temp->next;
	temp->next = P->next;
	free(P);
}
void LinkDestroy(LinkNode* L)
{
	LinkNode* P;
	while (L)
	{
		P = L;
		L = L->next;
		free(P);
	}
}

LinkNode* mergeTowLists(LinkNode* L1, LinkNode* L2)
{
	if (L1==NULL && L2==NULL)
	{
		return NULL;
	}
	if (L1 == NULL)
		return L2; 
	if (L2 == NULL)
		return L1;
	LinkNode* phead = (LinkNode*)malloc(sizeof(LinkNode));
	LinkNode* ptail = phead;
	LinkNode* l1 = L1;
	LinkNode* l2 = L2;
	while (l1 && l2)
	{
		if (l1->data < l2->data)
		{
			ptail->next = l1;
			l1 = l1->next;
		}
		else
		{
			ptail->next = l2;
			l2 = l2->next;
		}
		ptail = ptail->next;
	}
	if (l1)
	{
		ptail->next = l1;
	}
	if (l2)
	{
		ptail->next = l2;
	}
	return phead;
}
int main()
{

	int i = 0;
	int e = 0;
	int n = 0;
	//创建一个结构体变量指针
	LinkNode* L1 = InitList();
	printf("^链表初始化成功.\n");
	printf("\n");

	//判断链表是否为空
	int flag1 = LinkEmpty(L1);
	flag1 ? printf(">>>链表不为空\n") : printf(">>>链表为空\n");
	printf("\n");

	//插入新元素 + 打印链表中的元素
	printf("请输入链表L1中要插入的元素的个数\n");
	scanf("%d", &n);
	for (int j = 0; j < n; j++)
	{
		printf("请输入要插入的位置和data\n");
		scanf("%d %d", &i, &e);
		LinkInsert(L1, i, e);//L,i,e

	}
	LinkPrint(L1);


	LinkNode* L2 = InitList();
	printf("^链表初始化成功.\n");
	printf("\n");


	int flag2 = LinkEmpty(L2);
	flag2 ? printf(">>>链表不为空\n") : printf(">>>链表为空\n");
	printf("\n");
	printf("请输入链表L2中要插入的元素的个数\n");
	scanf("%d", &n);
	for (int j = 0; j < n; j++)
	{
		printf("请输入要插入的位置和data\n");
		scanf("%d %d", &i, &e);
		LinkInsert(L2, i, e);

	}
	LinkPrint(L2);

	LinkNode* L = mergeTowLists(L1->next, L2->next);//L1 L2都是一个有哨兵位的链表，再结合你在子函数里的参数的使用，
													//所以要传入你的链表的第二个节点
	printf("排序合并后的链表为\n");
	printf("nnnnnnn");
	LinkPrint(L);



	LinkDestroy(L);

	return 0;
}